package com.contain2.selfmap.demo1;

import java.util.Map;

/**
 * MapEntry采用了一种简单的方式，即只使用key的hashCode()方法。这并不是一个恰当的实现，因为它创建了键和值的副本。entrySet()
 * 的恰当实现应该在Map中提供视图， 而不是副本，并且这个视图允许对原始映射表进行修改（副本就不行），SimpleHashMap对此提供了修改。
 * 
 * @author Administrator
 * 
 * @param <K>
 * @param <V>
 */
public class MapEntry<K, V> implements Map.Entry<K, V> {

	private K key;
	private V value;

	public MapEntry(K key, V value) {
		this.key = key;
		this.value = value;
	}

	@Override
	public K getKey() {
		return key;
	}

	@Override
	public V getValue() {
		return value;
	}

	@Override
	public V setValue(V v) {
		V result = value;
		value = v;
		return result;
	}

	public int hashCode() {
		return (key == null ? 0 : key.hashCode())
				^ (value == null ? 0 : value.hashCode());
	}

	public boolean equals(Object o) {
		if (!(o instanceof MapEntry)) {
			return false;
		}
		MapEntry me = (MapEntry) o;
		return (key == null ? me.getKey() == null : key.equals(me.getKey()))
				&& (value == null ? me.getValue() == null : value.equals(me
						.getValue()));
	}

	public String toString() {
		return key + "=" + value;
	}

}
